// import { Loading } from 'element-ui';
import { validatenull } from '@/echart/util';
import { checkUrl, getFunction, serialize } from '@/utils/utils';
import { getToken } from '@/utils/auth';
import { Message } from 'element-ui';
import axios from 'axios';
window.$glob = {
	url: '',
	params: {},
	query: {},
	headers: {}
};
function getGlobParams() {
	var query = window.location.search.substring(1);
	query = query.split('&');
	query.forEach(ele => {
		var pair = ele.split('=');
		window.$glob.params[pair[0]] = pair[1];
	});
}

axios.defaults.timeout = 10000;
//返回其他状态吗
axios.defaults.validateStatus = function (status) {
	return status >= 200 && status <= 500; // 默认的
};
//跨域请求，允许保存cookie
// let loadingInstance = '';
axios.defaults.withCredentials = true;
axios.interceptors.request.use(
	config => {
		// loadingInstance = Loading.service({
		//   text: '拼命加载中',
		//   background: 'rgba(0,0,0,0)',
		//   spinner: 'el-icon-loading'
		// });
		getGlobParams();
		if (!checkUrl(config.url)) {
			config.url = window.$glob.url + config.url;
		}
		const meta = config.meta || {};
		const isToken = meta.isToken === false;
		//让每个请求携带token
		if (getToken() && !isToken && config.url.startsWith('/api')) {
			config.headers['Blade-Auth'] = 'bearer ' + getToken();
		}
		//headers中配置text请求
		if (config.text === true) {
			config.headers['Content-Type'] = 'text/plain';
		}
		//headers中配置serialize为true开启序列化
		if (config.method === 'post' && meta.isSerialize === true) {
			config.data = serialize(config.data);
		}
		if (!validatenull(window.$glob.header)) {
			let header = getFunction(window.$glob.header)();
			config.headers = Object.assign(config.headers, header);
		}
		//获取全局参数
		if (typeof config.data === 'object' && !validatenull(window.$glob.query)) {
			let query = getFunction(window.$glob.query)();
			let data = Object.assign(window.$glob.params, query);
			if (config.method == 'get') {
				config.params = Object.assign(config.params, data);
			} else if (config.method == 'post') {
				config.data = Object.assign(config.data, data);
			}
		}
		return config;
	},
	error => {
		return Promise.reject(error);
	}
);
//HTTPrequest拦截
axios.interceptors.response.use(
	res => {
		const status = res.data.code || res.status;
		const message = res.data.msg || res.data.error_description;
		if (status !== 200) {
			if (message && message != null) {
				// console.log("this.$message", Message);
				// Message.error(message);
			}
			return Promise.reject(res);
		}
		return res;
	},
	error => {
		if (error.response.status) {
			switch (error.response.status) {
				// 401: 未登录
				// 未登录则跳转登录页面，并携带当前页面的路径
				// 在登录成功后返回当前页面，这一步需要在登录页操作。
				case 401:
					Message.warning('401：身份验证失败，请关闭重新进入。');
					break;

				// 403 token过期
				// 登录过期对用户进行提示
				// 清除本地token和清空vuex中token对象
				// 跳转登录页面
				case 403:
					Message.warning('403：登录过期，请关闭重新进入。');
					// 清除token
					break;

				// 404请求不存在
				case 404:
					Message.warning('404：您访问的网页不存在。');
					break;
				// 其他错误，直接抛出错误提示
				default:
					Message.warning(error.response.data.error_description);
			}
			return Promise.reject(error.response);
		}
	}
);

export default axios;
